Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / backend / licenses_collector.py

Displaying Raw • Download


meshchatx/src/backend/licenses_collector.py c005017cbaf0102ba2fcfbcd2df970cf31e4452f (c005017c) Text, 6.89 KB

T8b949e"""Collect third-party license metadata for Python (backend) and Node (frontend)."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72import T7ee787importlibT7ee787.T7ee787metadata
Tff7b72import T7ee787json
Tff7b72import T7ee787shutil
Tff7b72import T7ee787subprocess
Tff7b72import T7ee787tomllib
Tff7b72from T7ee787datetime Tff7b72import Te6edf3UTCTb4b4b4, Te6edf3datetime
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72from T7ee787typing Tff7b72import Te6edf3Any

Tff7b72from T7ee787packagingT7ee787.T7ee787requirements Tff7b72import Te6edf3Requirement
Tff7b72from T7ee787packagingT7ee787.T7ee787utils Tff7b72import Te6edf3canonicalize_name

Te6edf3_ROOT_DIST_CANDIDATES Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffreticulum-meshchatxTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffreticulum_meshchatxTa5d6ff"Tb4b4b4)


Tff7b72def Td2a8ff_repo_rootTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Te6edf3PathTb4b4b4:
Tff7b72import T7ee787meshchatx

Tff7b72return Te6edf3PathTb4b4b4(Te6edf3meshchatxTff7b72.Td2a8ff__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparentTff7b72.Td2a8ffparent


Tff7b72def Td2a8ff_license_from_metadataTb4b4b4(Te6edf3metaTb4b4b4: Te6edf3importlibTff7b72.Td2a8ffmetadataTff7b72.Td2a8ffMetadataTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3le Tff7b72= Te6edf3metaTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffLicense-ExpressionTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3leTb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Te6edf3leTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3lic Tff7b72= Te6edf3metaTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffLicenseTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3lic Tff7b72and Tffa657strTb4b4b4(Te6edf3licTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72and Tffa657strTb4b4b4(Te6edf3licTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffupperTb4b4b4(Tb4b4b4) Tff7b72!= Ta5d6ff"Ta5d6ffUNKNOWNTa5d6ff"Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Te6edf3licTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3classifiers Tff7b72= Te6edf3metaTff7b72.Td2a8ffget_allTb4b4b4(Ta5d6ff"Ta5d6ffClassifierTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3line Tff7b72in Te6edf3classifiersTb4b4b4:
Tff7b72if Te6edf3lineTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffLicense ::Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3lineTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff::Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ff—Ta5d6ff"


Tff7b72def Td2a8ff_author_from_metadataTb4b4b4(Te6edf3metaTb4b4b4: Te6edf3importlibTff7b72.Td2a8ffmetadataTff7b72.Td2a8ffMetadataTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3a Tff7b72= Tb4b4b4(Te6edf3metaTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffAuthorTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3aTb4b4b4:
Tff7b72return Te6edf3a
Te6edf3ae Tff7b72= Tb4b4b4(Te6edf3metaTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffAuthor-emailTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3aeTb4b4b4:
Tff7b72return Te6edf3ae
Te6edf3m Tff7b72= Tb4b4b4(Te6edf3metaTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffMaintainerTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3mTb4b4b4:
Tff7b72return Te6edf3m
Tff7b72return Ta5d6ff"Ta5d6ff—Ta5d6ff"


Tff7b72def Td2a8ff_dist_for_requirement_nameTb4b4b4(Te6edf3nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Te6edf3importlibTff7b72.Td2a8ffmetadataTff7b72.Td2a8ffDistribution Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3key Tff7b72= Te6edf3canonicalize_nameTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3importlibTff7b72.Td2a8ffmetadataTff7b72.Td2a8ffdistributionTb4b4b4(Te6edf3keyTb4b4b4)
Tff7b72except Te6edf3importlibTff7b72.Td2a8ffmetadataTff7b72.Td2a8ffPackageNotFoundErrorTb4b4b4:
Tff7b72pass
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3importlibTff7b72.Td2a8ffmetadataTff7b72.Td2a8ffdistributionTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72except Te6edf3importlibTff7b72.Td2a8ffmetadataTff7b72.Td2a8ffPackageNotFoundErrorTb4b4b4:
Tff7b72return Tff7b72None


Tff7b72def Td2a8ff_collect_python_transitiveTb4b4b4(Te6edf3root_namesTb4b4b4: Tffa657tupleTb4b4b4[Tffa657strTb4b4b4, Tff7b72.Tff7b72.Tff7b72.Tb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
Te6edf3rowsTb4b4b4: Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3seenTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffvisitTb4b4b4(Te6edf3nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3cname Tff7b72= Te6edf3canonicalize_nameTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72if Te6edf3cname Tff7b72in Te6edf3seenTb4b4b4:
Tff7b72return
Te6edf3dist Tff7b72= Te6edf3_dist_for_requirement_nameTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72if Te6edf3dist Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Te6edf3seenTff7b72.Td2a8ffaddTb4b4b4(Te6edf3cnameTb4b4b4)
Te6edf3meta Tff7b72= Te6edf3distTff7b72.Td2a8ffmetadata
Te6edf3pkg_name Tff7b72= Te6edf3metaTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffNameTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3name
Te6edf3rowsTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3pkg_nameTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4: Te6edf3distTff7b72.Td2a8ffversionTb4b4b4,
Ta5d6ff"Ta5d6ffauthorTa5d6ff"Tb4b4b4: Te6edf3_author_from_metadataTb4b4b4(Te6edf3metaTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fflicenseTa5d6ff"Tb4b4b4: Te6edf3_license_from_metadataTb4b4b4(Te6edf3metaTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72for Te6edf3req_str Tff7b72in Te6edf3distTff7b72.Td2a8ffrequires Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tb4b4b4(Te6edf3req_str Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Te6edf3req Tff7b72= Te6edf3RequirementTb4b4b4(Te6edf3req_strTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72continue
Tff7b72if Te6edf3reqTff7b72.Td2a8ffextras Tff7b72and Tff7b72not Te6edf3reqTff7b72.Td2a8ffmarkerTb4b4b4:
Tff7b72pass
Tff7b72if Te6edf3reqTff7b72.Td2a8ffmarker Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tff7b72not Te6edf3reqTff7b72.Td2a8ffmarkerTff7b72.Td2a8ffevaluateTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3visitTb4b4b4(Te6edf3reqTff7b72.Td2a8ffnameTb4b4b4)

Tff7b72for Te6edf3root Tff7b72in Te6edf3root_namesTb4b4b4:
Te6edf3visitTb4b4b4(Te6edf3rootTb4b4b4)

Te6edf3rowsTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3rTb4b4b4: Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3rows


Tff7b72def Td2a8ff_python_roots_from_pyprojectTb4b4b4(Te6edf3repo_rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657strTb4b4b4, Tff7b72.Tff7b72.Tff7b72.Tb4b4b4]Tb4b4b4:
Te6edf3pyproject Tff7b72= Te6edf3repo_root Tff7b72/ Ta5d6ff"Ta5d6ffpyproject.tomlTa5d6ff"
Tff7b72if Tff7b72not Te6edf3pyprojectTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3_ROOT_DIST_CANDIDATESTb4b4b4[Tb4b4b4:T79c0ff1Tb4b4b4]
Tff7b72tryTb4b4b4:
Tff7b72with Te6edf3pyprojectTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3data Tff7b72= Te6edf3tomllibTff7b72.Td2a8ffloadTb4b4b4(Te6edf3fTb4b4b4)
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72return Te6edf3_ROOT_DIST_CANDIDATESTb4b4b4[Tb4b4b4:T79c0ff1Tb4b4b4]
Te6edf3deps Tff7b72= Tb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffprojectTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdependenciesTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Te6edf3namesTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3line Tff7b72in Te6edf3depsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3req Tff7b72= Te6edf3RequirementTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72continue
Te6edf3namesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3reqTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72if Tff7b72not Te6edf3namesTb4b4b4:
Tff7b72return Te6edf3_ROOT_DIST_CANDIDATESTb4b4b4[Tb4b4b4:T79c0ff1Tb4b4b4]
Tff7b72return Tffa657tupleTb4b4b4(Tffa657sortedTb4b4b4(Tffa657setTb4b4b4(Te6edf3namesTb4b4b4)Tb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3nTb4b4b4: Te6edf3nTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)


Tff7b72def Td2a8ffcollect_backend_licensesTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
Tff7b72for Te6edf3root Tff7b72in Te6edf3_ROOT_DIST_CANDIDATESTb4b4b4:
Tff7b72if Te6edf3_dist_for_requirement_nameTb4b4b4(Te6edf3rootTb4b4b4) Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3_collect_python_transitiveTb4b4b4(Tb4b4b4(Te6edf3rootTb4b4b4,Tb4b4b4)Tb4b4b4)
Te6edf3repo Tff7b72= Te6edf3_repo_rootTb4b4b4(Tb4b4b4)
Te6edf3roots Tff7b72= Te6edf3_python_roots_from_pyprojectTb4b4b4(Te6edf3repoTb4b4b4)
Tff7b72return Te6edf3_collect_python_transitiveTb4b4b4(Te6edf3rootsTb4b4b4)


Tff7b72def Td2a8ff_flatten_pnpm_licenses_jsonTb4b4b4(Te6edf3dataTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
Te6edf3outTb4b4b4: Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3_license_keyTb4b4b4, Te6edf3packages Tff7b72in Te6edf3dataTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3packagesTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72for Te6edf3pkg Tff7b72in Te6edf3packagesTb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3pkgTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3name Tff7b72= Te6edf3pkgTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff?Ta5d6ff"
Te6edf3versions Tff7b72= Te6edf3pkgTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffversionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Te6edf3version Tff7b72= Te6edf3versionsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72if Te6edf3versions Tff7b72else Ta5d6ff"Ta5d6ff?Ta5d6ff"
Te6edf3author Tff7b72= Te6edf3pkgTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffauthorTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff—Ta5d6ff"
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3authorTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3author Tff7b72= Tffa657strTb4b4b4(Te6edf3authorTb4b4b4)
Te6edf3lic Tff7b72= Te6edf3pkgTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflicenseTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3_license_key Tff7b72or Ta5d6ff"Ta5d6ff—Ta5d6ff"
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3nameTb4b4b4,
Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3versionTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffauthorTa5d6ff"Tb4b4b4: Te6edf3authorTb4b4b4,
Ta5d6ff"Ta5d6fflicenseTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3licTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3outTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3rTb4b4b4: Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3out


Tff7b72def Td2a8ff_load_embedded_frontend_licensesTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3data_dir Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparent Tff7b72/ Ta5d6ff"Ta5d6ffdataTa5d6ff"
Te6edf3path Tff7b72= Te6edf3data_dir Tff7b72/ Ta5d6ff"Ta5d6fflicenses_frontend.jsonTa5d6ff"
Tff7b72if Tff7b72not Te6edf3pathTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3raw Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3pathTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149OSErrorTb4b4b4, Te6edf3jsonTff7b72.Td2a8ffJSONDecodeErrorTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3rawTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tb4b4b4[Te6edf3x Tff7b72for Te6edf3x Tff7b72in Te6edf3raw Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3xTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4]


Tff7b72def Td2a8ffcollect_frontend_licensesTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3embedded Tff7b72= Te6edf3_load_embedded_frontend_licensesTb4b4b4(Tb4b4b4)
Te6edf3repo Tff7b72= Te6edf3_repo_rootTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tb4b4b4(Te6edf3repo Tff7b72/ Ta5d6ff"Ta5d6ffpackage.jsonTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3embedded Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3embeddedTb4b4b4, Ta5d6ff"Ta5d6ffembeddedTa5d6ff"
Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffnoneTa5d6ff"

Te6edf3pnpm Tff7b72= Te6edf3shutilTff7b72.Td2a8ffwhichTb4b4b4(Ta5d6ff"Ta5d6ffpnpmTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3pnpmTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3proc Tff7b72= Te6edf3subprocessTff7b72.Td2a8ffrunTb4b4b4(
Tb4b4b4[Te6edf3pnpmTb4b4b4, Ta5d6ff"Ta5d6fflicensesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflistTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--jsonTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3cwdTff7b72=Te6edf3repoTb4b4b4,
Te6edf3capture_outputTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3textTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3timeoutTff7b72=T79c0ff120Tb4b4b4,
Te6edf3checkTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3procTff7b72.Td2a8ffreturncode Tff7b72== T79c0ff0 Tff7b72and Te6edf3procTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3parsed Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3procTff7b72.Td2a8ffstdoutTb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3parsedTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3_flatten_pnpm_licenses_jsonTb4b4b4(Te6edf3parsedTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffpnpmTa5d6ff"
Tff7b72except Tb4b4b4(Te6edf3subprocessTff7b72.Td2a8ffTimeoutExpiredTb4b4b4, Te6edf3jsonTff7b72.Td2a8ffJSONDecodeErrorTb4b4b4, Tf85149OSErrorTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72if Te6edf3embedded Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3embeddedTb4b4b4, Ta5d6ff"Ta5d6ffembeddedTa5d6ff"

Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffnoneTa5d6ff"


Tff7b72def Td2a8ffbuild_licenses_payloadTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3backend Tff7b72= Te6edf3collect_backend_licensesTb4b4b4(Tb4b4b4)
Te6edf3frontendTb4b4b4, Te6edf3fe_source Tff7b72= Te6edf3collect_frontend_licensesTb4b4b4(Tb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4: Te6edf3backendTb4b4b4,
Ta5d6ff"Ta5d6fffrontendTa5d6ff"Tb4b4b4: Te6edf3frontendTb4b4b4,
Ta5d6ff"Ta5d6ffmetaTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffgenerated_atTa5d6ff"Tb4b4b4: Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff+00:00Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffZTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffbackend_countTa5d6ff"Tb4b4b4: Tffa657lenTb4b4b4(Te6edf3backendTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fffrontend_countTa5d6ff"Tb4b4b4: Tffa657lenTb4b4b4(Te6edf3frontendTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fffrontend_sourceTa5d6ff"Tb4b4b4: Te6edf3fe_sourceTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────